home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / jst_dev / sources / src / loaders / jst / readdostrack.asm < prev    next >
Assembly Source File  |  2000-04-12  |  4KB  |  255 lines

  1. ; *** $VER: trackdisk.device utilities V1.2
  2. ; *** Written by Jean-François Fabre
  3. ; ***
  4. ; *** Thanks to Harry
  5.  
  6.  
  7.     include    "/lib/libs.i"
  8.     include    "/lib/macros.i"
  9.     include    "devices/trackdisk.i"
  10.     include    "exec/io.i"
  11.  
  12.     XREF    _SysBase
  13.  
  14. ; *** DOS Disks track read/write
  15. ; *** Sorry for the shitty code
  16. ;
  17. ; At least it works fine
  18.  
  19. DOS_SECTOR_LEN=512
  20. DOS_TRACK_LEN=DOS_SECTOR_LEN*11
  21.  
  22.  
  23.     XDEF    _ReadRawTrackSync
  24.     XDEF    @ReadRawTrackSync
  25.  
  26.     XDEF    _ReadRawTrackIndex
  27.     XDEF    @ReadRawTrackIndex
  28.  
  29.     XDEF    _ReadDosTrack
  30.     XDEF    _WriteDosTrack
  31.     XDEF    _ReadSector
  32.     XDEF    _WriteSector
  33.     XDEF    _InitTrackDisk
  34.     XDEF    _ShutTrackDisk
  35.     
  36.     XDEF    _ReadBoot
  37.     XDEF    _WriteBoot
  38.     XDEF    _CheckDiskIn
  39.     XDEF    _CheckWriteProtect
  40.     XDEF    @ReadBoot
  41.  
  42. _ReadRawTrackIndex:
  43.     move.l    8(A7),A0
  44.     move.l    4(A7),D0
  45. @ReadRawTrackIndex:
  46.     movem.l    D1-D6/A1-A6,-(sp)
  47.     lea    diskio,a1
  48.     move.w    #TD_RAWREAD,IO_COMMAND(a1)
  49.     move.b    #IOTDB_INDEXSYNC,IO_FLAGS(a1)
  50.     move.l    A0,IO_DATA(a1)
  51.     move.l    #$7FFE,IO_LENGTH(a1)
  52.     move.l    D0,IO_OFFSET(a1)
  53.     move.l  _SysBase,a6
  54.     JSRLIB    DoIO
  55.     movem.l    (sp)+,D1-D6/A1-A6
  56.     rts    
  57.  
  58.  
  59. _ReadRawTrackSync:
  60.     move.l    8(A7),A0
  61.     move.l    4(A7),D0
  62. @ReadRawTrackSync:
  63.     movem.l    D1-D6/A1-A6,-(sp)
  64.     lea    diskio,a1
  65.     move.w    #TD_RAWREAD,IO_COMMAND(a1)
  66.     move.b    #IOTDB_WORDSYNC,IO_FLAGS(a1)
  67.     move.l    A0,IO_DATA(a1)
  68.     ; *** something missing!!!!!!!
  69.     move.l    #$7C00,IO_LENGTH(a1)
  70.     move.l    D0,IO_OFFSET(a1)
  71.     move.l  _SysBase,a6
  72.     JSRLIB    DoIO
  73.     movem.l    (sp)+,D1-D6/A1-A6
  74.     rts    
  75.  
  76. _ReadDosTrack:
  77.     move.l    8(A7),A0
  78.     move.l    4(A7),D0
  79. @ReadDosTrack:
  80.     STORE_REGS
  81.     mulu.w    #DOS_TRACK_LEN,D0
  82.     lea    diskio,a1
  83.     move.w    #2,28(a1)
  84.     move.l    A0,40(a1)
  85.     move.l    #DOS_TRACK_LEN,36(a1)
  86.     move.l    D0,44(a1)
  87.     move.l  _SysBase,a6
  88.     JSRLIB    DoIO
  89.     RESTORE_REGS
  90.     moveq    #0,D0    
  91.     rts
  92.  
  93. _ReadBoot:
  94.     move.l    4(A7),D0
  95. @ReadBoot:
  96.     STORE_REGS
  97.     lea    diskio,a1
  98.     move.w    #2,28(a1)    ; Command = read
  99.     move.l    D0,40(a1)    ; Buffer
  100.     move.l    #2*DOS_SECTOR_LEN,36(a1)    ; Boot length
  101.     move.l    #0,44(a1)    ; Boot sector
  102.     move.l  _SysBase,a6
  103.     JSRLIB    DoIO
  104.     RESTORE_REGS
  105.     moveq    #0,D0    
  106.     rts
  107.  
  108. _WriteBoot:
  109.     move.l    4(A7),D0
  110. @WriteBoot:
  111.     STORE_REGS
  112.     lea    diskio,a1
  113.     move.w    #3,28(a1)    ; Command = write
  114.     move.l    D0,40(a1)    ; Buffer
  115.     move.l    #2*DOS_SECTOR_LEN,36(a1)    ; Boot length
  116.     move.l    #0,44(a1)    ; Boot sector
  117.     move.l  _SysBase,a6
  118.     JSRLIB    DoIO
  119.     RESTORE_REGS
  120.     moveq    #0,D0    
  121.     rts
  122.  
  123. _WriteDosTrack:
  124.     move.l    8(A7),A0
  125.     move.l    4(A7),D0
  126. @WriteDosTrack:
  127.     STORE_REGS
  128.     mulu.w    #DOS_TRACK_LEN,D0
  129.     lea     diskio(PC),a1
  130.     move    #3,28(a1)        ; CMD_WRITE
  131.     move.l  A0,40(a1)
  132.     move.l  #DOS_TRACK_LEN,36(a1)
  133.     move.l  D0,44(a1)
  134.     move.l  _SysBase,a6
  135.     JSRLIB    DoIO
  136.     RESTORE_REGS
  137.     moveq    #0,D0    
  138.     rts
  139.     
  140. _WriteSector:
  141.     move.l    8(A7),A0
  142.     move.l    4(A7),D0
  143. @WriteSector:
  144.     STORE_REGS
  145.     mulu.w    #DOS_SECTOR_LEN,D0
  146.     lea     diskio(PC),a1
  147.     move.w    #3,28(a1)        ; CMD_WRITE
  148.     move.l  A0,40(a1)
  149.     move.l  #DOS_SECTOR_LEN,36(a1)
  150.     move.l  D0,44(a1)
  151.     move.l  _SysBase,a6
  152.     JSRLIB    DoIO
  153.     RESTORE_REGS
  154.     moveq    #0,D0    
  155.     rts
  156.  
  157. _ReadSector:
  158.     move.l    8(A7),A0
  159.     move.l    4(A7),D0
  160. @ReadSector:
  161.     STORE_REGS
  162.     mulu.w    #DOS_SECTOR_LEN,D0
  163.     lea     diskio(PC),a1
  164.     move.w    #2,28(a1)        ; CMD_READ
  165.     move.l  A0,40(a1)
  166.     move.l  #DOS_SECTOR_LEN,36(a1)
  167.     move.l  D0,44(a1)
  168.     move.l  _SysBase,a6
  169.     JSRLIB    DoIO
  170.     RESTORE_REGS
  171.     moveq    #0,D0    
  172.     rts
  173.  
  174.  
  175. @SendCommand:
  176.     movem.l    D1-A6,-(sp)
  177.     lea    diskio(PC),a1
  178.     move.w    d0,IO_COMMAND(a1)
  179.     move.l  _SysBase,a6
  180.     JSRLIB    DoIO
  181.     move.l  32(a1),d0
  182.     movem.l    (sp)+,D1-A6
  183.     rts
  184.  
  185. _CheckDiskIn:
  186. @CheckDiskIn:
  187.     moveq    #14,d0        ; Test Disk Inserted
  188.     bsr    @SendCommand
  189.     rts
  190.  
  191. _CheckWriteProtect:
  192. @CheckWriteProtect:
  193.     moveq    #15,d0        ; Test Disk Write Protected
  194.     bsr    @SendCommand
  195.     rts
  196.  
  197. _InitTrackDisk:
  198.     move.l    4(sp),D0
  199. @InitTrackDisk:
  200.     STORE_REGS
  201.  
  202.     move.l    D0,diskunit
  203.  
  204.     move.l    _SysBase,a6
  205.     sub.l    a1,a1
  206.     JSRLIB    FindTask
  207.     move.l    d0,diskrep+$10
  208.     
  209.     lea    diskrep(PC),a1
  210.     JSRLIB    AddPort
  211.     
  212.     lea    diskio(PC),a1
  213.     move.l    #diskrep,14(a1)
  214.     move.l    diskunit,d0
  215.     clr.l    d1
  216.     lea    trddevice(PC),a0
  217.     JSRLIB    OpenDevice
  218.     RESTORE_REGS
  219.     move.l    #diskio,D0
  220.     rts
  221.     
  222. _ShutTrackDisk:
  223. @ShutTrackDisk:
  224.     STORE_REGS
  225.     move.l _SysBase,a6
  226.     lea     diskio,a1  ; pointeur sur I/O disque
  227.     move.l  32(a1),d7
  228.     move    #9,28(a1)  ;  Moteur marche/arret
  229.     move.l  #0,36(a1)  ; 0=arret,1=marche,c'est a dire arreter
  230.     JSRLIB    DoIO   ; moteur
  231.     
  232.     lea    diskio,a1
  233.     JSRLIB    CloseDevice ;  Fermer Trackdisk.device
  234.     
  235.     lea    diskrep,a1
  236.     JSRLIB    RemPort    ; Liberer port
  237.     RESTORE_REGS
  238.     moveq    #0,D0
  239.     rts
  240.     
  241.  
  242. diskio:
  243.     blk.l 20,0
  244.     
  245. diskrep:
  246.     blk.l 8,0
  247.  
  248. diskunit:
  249.     dc.l    0
  250.  
  251. trddevice:
  252.     dc.b    'trackdisk.device',0
  253.     cnop    0,4
  254.  
  255.